/**
 * 页脚组件
 * 负责处理页脚交互、版权信息更新、社交媒体链接等功能
 */

class FooterComponent {
    constructor() {
        this.footer = null;
        this.copyrightElement = null;
        this.yearElement = null;
        this.socialLinks = null;
        this.backToTopButton = null;
        this.currentYear = new Date().getFullYear();
        this.isVisible = false;
    }

    /**
     * 初始化页脚组件
     */
    init() {
        this.footer = document.querySelector('footer');
        this.copyrightElement = document.querySelector('.copyright');
        this.yearElement = document.querySelector('.current-year');
        this.socialLinks = document.querySelectorAll('.social-links a');
        this.backToTopButton = document.querySelector('.back-to-top');

        this.updateCopyrightYear();
        this.setupEventListeners();
        this.setupScrollDetection();
    }

    /**
     * 更新版权年份
     */
    updateCopyrightYear() {
        // 更新年份显示
        if (this.yearElement) {
            this.yearElement.textContent = this.currentYear;
        } else if (this.copyrightElement) {
            // 如果没有特定的年份元素，尝试在版权文本中替换年份
            const copyrightText = this.copyrightElement.textContent;
            const yearRegex = /©\s*\d{4}/;
            
            if (yearRegex.test(copyrightText)) {
                this.copyrightElement.textContent = copyrightText.replace(
                    yearRegex,
                    `© ${this.currentYear}`
                );
            } else {
                // 如果没有年份格式，添加年份
                this.copyrightElement.textContent += ` © ${this.currentYear}`;
            }
        }
    }

    /**
     * 设置事件监听器
     */
    setupEventListeners() {
        // 回到顶部按钮点击事件
        if (this.backToTopButton) {
            this.backToTopButton.addEventListener('click', (e) => {
                e.preventDefault();
                this.scrollToTop();
            });
        }

        // 社交媒体链接点击事件
        this.socialLinks.forEach(link => {
            link.addEventListener('click', (e) => {
                this.handleSocialLinkClick(e);
            });
        });

        // 页脚链接点击事件（可选）
        const footerLinks = this.footer.querySelectorAll('a:not(.social-links a):not(.back-to-top)');
        footerLinks.forEach(link => {
            link.addEventListener('click', (e) => {
                this.handleFooterLinkClick(e);
            });
        });
    }

    /**
     * 设置滚动检测以显示/隐藏回到顶部按钮
     */
    setupScrollDetection() {
        window.addEventListener('scroll', () => {
            const scrollPosition = window.scrollY;
            const windowHeight = window.innerHeight;
            const documentHeight = document.documentElement.scrollHeight;

            // 当滚动超过一定距离时显示回到顶部按钮
            if (scrollPosition > windowHeight * 0.5) {
                this.showBackToTop();
            } else {
                this.hideBackToTop();
            }

            // 可以添加页脚淡入效果
            if (scrollPosition + windowHeight > documentHeight - 300 && !this.isVisible) {
                this.animateFooterIn();
                this.isVisible = true;
            }
        });
    }

    /**
     * 滚动到页面顶部
     */
    scrollToTop() {
        // 使用平滑滚动
        window.scrollTo({
            top: 0,
            behavior: 'smooth'
        });

        // 可选：添加滚动动画
        const scrollDuration = 600; // 毫秒
        const startTime = performance.now();
        const startScroll = window.scrollY;

        const animateScroll = (timestamp) => {
            const elapsed = timestamp - startTime;
            const progress = Math.min(elapsed / scrollDuration, 1);
            const easeProgress = this.easeOutCubic(progress);

            window.scrollTo(0, startScroll - (startScroll * easeProgress));

            if (elapsed < scrollDuration) {
                requestAnimationFrame(animateScroll);
            }
        };

        requestAnimationFrame(animateScroll);
    }

    /**
     * 缓动函数
     * @param {number} t - 时间进度 (0-1)
     * @returns {number} 缓动后的进度
     */
    easeOutCubic(t) {
        return 1 - Math.pow(1 - t, 3);
    }

    /**
     * 显示回到顶部按钮
     */
    showBackToTop() {
        if (this.backToTopButton && this.backToTopButton.classList.contains('hidden')) {
            this.backToTopButton.classList.remove('hidden');
            
            // 添加淡入动画
            setTimeout(() => {
                this.backToTopButton.classList.add('visible');
            }, 10);
        }
    }

    /**
     * 隐藏回到顶部按钮
     */
    hideBackToTop() {
        if (this.backToTopButton && this.backToTopButton.classList.contains('visible')) {
            this.backToTopButton.classList.remove('visible');
            
            // 等待动画完成后隐藏
            setTimeout(() => {
                this.backToTopButton.classList.add('hidden');
            }, 300);
        }
    }

    /**
     * 处理社交媒体链接点击
     * @param {Event} e - 点击事件对象
     */
    handleSocialLinkClick(e) {
        const target = e.currentTarget;
        const href = target.getAttribute('href');
        
        // 在新标签页打开社交媒体链接
        if (href.startsWith('http') && !target.hasAttribute('target')) {
            target.setAttribute('target', '_blank');
            target.setAttribute('rel', 'noopener noreferrer');
        }
        
        // 可选：添加点击统计或其他自定义行为
        const platform = target.getAttribute('data-platform') || '';
        this.trackSocialClick(platform);
    }

    /**
     * 处理页脚链接点击
     * @param {Event} e - 点击事件对象
     */
    handleFooterLinkClick(e) {
        const target = e.currentTarget;
        const href = target.getAttribute('href');
        
        // 内部锚点链接处理
        if (href.startsWith('#')) {
            e.preventDefault();
            this.scrollToAnchor(href);
        }
        // 其他链接可以由路由模块处理或默认行为
        else if (window.router && target.hasAttribute('router-link')) {
            // 已由路由模块处理，这里可以添加额外逻辑
        }
    }

    /**
     * 滚动到锚点位置
     * @param {string} anchor - 锚点选择器
     */
    scrollToAnchor(anchor) {
        const element = document.querySelector(anchor);
        
        if (element) {
            const headerOffset = document.querySelector('header')?.offsetHeight || 0;
            const elementPosition = element.getBoundingClientRect().top;
            const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
            
            window.scrollTo({
                top: offsetPosition,
                behavior: 'smooth'
            });
        }
    }

    /**
     * 页脚淡入动画
     */
    animateFooterIn() {
        if (this.footer) {
            this.footer.classList.add('animate-in');
        }
    }

    /**
     * 跟踪社交媒体点击（示例方法）
     * @param {string} platform - 平台名称
     */
    trackSocialClick(platform) {
        // 这里可以添加分析代码或其他跟踪逻辑
        console.log(`Social media click: ${platform}`);
        
        // 例如 Google Analytics
        // if (window.gtag) {
        //   gtag('event', 'social_click', {
        //     'platform': platform,
        //     'timestamp': new Date().toISOString()
        //   });
        // }
    }

    /**
     * 动态添加社交媒体链接
     * @param {Object} socialConfig - 社交媒体配置
     */
    addSocialLink(socialConfig) {
        const socialContainer = this.footer.querySelector('.social-links');
        
        if (!socialContainer) return;
        
        const link = document.createElement('a');
        link.href = socialConfig.url;
        link.target = '_blank';
        link.rel = 'noopener noreferrer';
        link.setAttribute('data-platform', socialConfig.platform);
        link.className = `social-link ${socialConfig.platform}`;
        
        // 添加图标
        if (socialConfig.icon) {
            const icon = document.createElement('i');
            icon.className = `icon ${socialConfig.icon}`;
            link.appendChild(icon);
        }
        
        // 添加文本
        if (socialConfig.label) {
            const text = document.createTextNode(socialConfig.label);
            link.appendChild(text);
        }
        
        // 设置ARIA属性
        link.setAttribute('aria-label', `${socialConfig.platform} ${socialConfig.label || '链接'}`);
        
        socialContainer.appendChild(link);
        
        // 绑定事件
        link.addEventListener('click', (e) => {
            this.handleSocialLinkClick(e);
        });
    }

    /**
     * 更新页脚内容
     * @param {Object} content - 要更新的内容
     */
    updateContent(content) {
        // 更新版权信息
        if (content.copyright && this.copyrightElement) {
            this.copyrightElement.textContent = content.copyright;
        }
        
        // 更新社交媒体链接
        if (content.socialLinks && Array.isArray(content.socialLinks)) {
            const socialContainer = this.footer.querySelector('.social-links');
            
            if (socialContainer) {
                // 清空现有链接
                socialContainer.innerHTML = '';
                
                // 添加新链接
                content.socialLinks.forEach(social => {
                    this.addSocialLink(social);
                });
            }
        }
        
        // 更新其他内容
        if (content.links && Array.isArray(content.links)) {
            // 这里可以更新页脚中的链接列表
            // 具体实现取决于页脚的HTML结构
        }
    }

    /**
     * 设置页脚样式主题
     * @param {string} theme - 主题名称
     */
    setTheme(theme) {
        if (this.footer) {
            // 移除所有主题类
            this.footer.className = this.footer.className.replace(/\btheme-\w+\b/g, '').trim();
            
            // 添加新主题类
            if (theme) {
                this.footer.classList.add(`theme-${theme}`);
            }
        }
    }

    /**
     * 销毁组件，清理事件监听器
     */
    destroy() {
        // 清理事件监听器
        if (this.backToTopButton) {
            this.backToTopButton.removeEventListener('click', this.scrollToTop.bind(this));
        }
        
        // 清理社交媒体链接事件
        this.socialLinks.forEach(link => {
            link.removeEventListener('click', this.handleSocialLinkClick.bind(this));
        });
        
        // 移除滚动监听器
        window.removeEventListener('scroll', () => {});
    }
}

// 导出组件类
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    module.exports = FooterComponent;
} else {
    window.FooterComponent = FooterComponent;
}

/**
 * 使用示例：
 * 
 * // 在页面加载完成后初始化
 * document.addEventListener('DOMContentLoaded', () => {
 *   const footer = new FooterComponent();
 *   footer.init();
 *   
 *   // 可以动态添加社交媒体链接
 *   footer.addSocialLink({
 *     platform: 'github',
 *     url: 'https://github.com',
 *     icon: 'icon-github',
 *     label: 'GitHub'
 *   });
 *   
 *   // 可以设置不同的主题
 *   footer.setTheme('dark');
 * });
 */